home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
libs
/
bignum_37_28.lha
/
BigNum
/
developpers
/
clib
/
BigNum_protos.h
Wrap
C/C++ Source or Header
|
1997-02-11
|
3KB
|
120 lines
#ifndef CLIB_BIGNUM_PROTOS_H
#define CLIB_BIGNUM_PROTOS_H
/*
* clib/BigNum_protos.h
*
* © Allenbrand Brice, Ringard'Production 1997
*/
typedef struct
{
int signe;
int nc;
unsigned short *chiffres;
} BigNum,*PtrBigNum;
/* Addition */
void BigNumAdd(PtrBigNum x,PtrBigNum y,PtrBigNum z);
void BigNumDigitAdd(PtrBigNum x,int y);
/* Division */
void BigNumDiv(PtrBigNum x,PtrBigNum y,PtrBigNum z);
void BigNumDigitDiv(PtrBigNum x,int y,PtrBigNum z);
void BigNumRightShift(PtrBigNum x,int Nb);
void BigNumModulo(PtrBigNum x,PtrBigNum y,PtrBigNum z);
void BigNumEDiv(PtrBigNum x,PtrBigNum y,PtrBigNum z,PtrBigNum Rest);
/* Multiplication */
void BigNumMul(PtrBigNum x,PtrBigNum y,PtrBigNum z);
void BigNumFastMul(PtrBigNum x,PtrBigNum y,PtrBigNum z);
void BigNumDigitMul(PtrBigNum x,int y);
void BigNumLeftShift(PtrBigNum x,int Nb);
void BigNumSquare(PtrBigNum x,PtrBigNum z);
/* Substraction */
void BigNumSub(PtrBigNum x,PtrBigNum y,PtrBigNum z);
void BigNumDigitSub(PtrBigNum x,int y);
/* Displaying */
void BigNumDisplay(PtrBigNum z);
void BigNumPrint(PtrBigNum x);
/* Conversion */
void BigNumStrToBigNum(PtrBigNum x,char *S);
void BigNumToStr(PtrBigNum x,char *y);
void BigNumIntToBigNum(PtrBigNum z,int x);
int BigNumToInt(PtrBigNum z);
/* Comparison */
short BigNumCompare(PtrBigNum x,PtrBigNum y);
short BigNumFastCompare(PtrBigNum x,PtrBigNum y);
/* Prime test */
short BigNumDiffCarre(PtrBigNum n,PtrBigNum res,int lim);
short BigNumRho(PtrBigNum n,PtrBigNum res,int lim);
short BigNumBrutePrime(PtrBigNum i,int aff);
short BigNumLucasLehmer(int x);
/* Misc. */
void BigNumRnd(int n,PtrBigNum z);
void BigNumPgcd(PtrBigNum x,PtrBigNum y,PtrBigNum z);
void BigNumPuiModulo(PtrBigNum x,PtrBigNum y,PtrBigNum z,PtrBigNum t);
short BigNumSqrt(PtrBigNum x,PtrBigNum y);
void BigNumSwap(PtrBigNum x,PtrBigNum y);
void BigNumAssign(PtrBigNum x,PtrBigNum y);
void BigNumPower2(PtrBigNum x,int Nb);
/* No more Macro */
void BigNumSetNul(PtrBigNum x);
int BigNumSize(PtrBigNum x);
short BigNumIsEven(PtrBigNum x);
short BigNumIsNul(PtrBigNum x);
short BigNumIsPositive(PtrBigNum x);
short BigNumIsNegative(PtrBigNum x);
void BigNumAbsBigNum(PtrBigNum x);
/* Alloc/Free */
PtrBigNum BigNumInit(void);
void BigNumFree(int i);
short BigNumErrorStatus(void);
void BigNumInfo(void);
/* For compatibility to prior versions */
#define SetNul(x) {(x)->chiffres[(x)->nc=0]=0;(x)->signe=1;}
#define Size(x) ((x)->nc+1)
#define Even(x) (!((x)->chiffres[0]&1))
#define AbsBigNum(x,y) {Assign(x,y);x->signe=1;}
#define IsPositive(x) ((x)->signe)
#define IsNul(x) (((!(x)->nc)&&(!(x)->chiffres[0]))?1:0)
/* Error codes */
#define DIVIDE_ZERO 1
#define NO_MEMORY 2
#define TOO_MUCH_BIGNUM 4
#define TOO_MUCH_FREE_BIGNUM 8
#define INVALID_DOS 16
#define INVALID_GRAPHICS 32
#define INVALID_CPU 64
#define BIGNUM_SIZE_TOO_HIGH 128
#define NEGATIVE_SQRT 256
#define PARTIAL_BIGNUM_TO_INT 512
#define NEGATIVE_PGCD 1024
#define ZERO_POWER_ZERO 2048
#define MODULO_ZERO 4096
#endif /* CLIB_BIGNUM_PROTOS_H */